diff --git a/system/libraries/Session.php b/system/libraries/Session.php
index 28e469d..16f373f 100644
--- a/system/libraries/Session.php
+++ b/system/libraries/Session.php
@@ -26,6 +26,7 @@
  */
 class CI_Session {
 
+    var $CI;
 	var $now;
 	var $encryption		= TRUE;
 	var $use_database	= FALSE;
@@ -34,7 +35,7 @@
     var $sess_cookie	= 'ci_session';
 	var $userdata		= array();
     var $gc_probability	= 5;
-    var $object;
+
     
 
 	/**
@@ -45,7 +46,7 @@
 	 */		
 	function CI_Session()
 	{
-		$this->object =& get_instance();
+		$this->CI =& get_instance();
 
 		log_message('debug', "Session Class Initialized");
 		$this->sess_run();
@@ -73,7 +74,7 @@
 		 * "last_visit" times based on each user's locale.
 		 *
 		 */
-		if (strtolower($this->object->config->item('time_reference')) == 'gmt')
+		if (strtolower($this->CI->config->item('time_reference')) == 'gmt')
 		{
 			$now = time();
 			$this->now = mktime(gmdate("H", $now), gmdate("i", $now), gmdate("s", $now), gmdate("m", $now), gmdate("d", $now), gmdate("Y", $now));   
@@ -97,13 +98,13 @@
 		 * two years from now.
 		 *
 		 */
-		$expiration = $this->object->config->item('sess_expiration');
+		$expiration = $this->CI->config->item('sess_expiration');
 		
 		if (is_numeric($expiration))
 		{
 			if ($expiration > 0)
 			{
-				$this->sess_length = $this->object->config->item('sess_expiration');
+				$this->sess_length = $this->CI->config->item('sess_expiration');
 			}
 			else
 			{
@@ -112,25 +113,25 @@
 		}
 		
 		// Do we need encryption?
-		$this->encryption = $this->object->config->item('sess_encrypt_cookie');
+		$this->encryption = $this->CI->config->item('sess_encrypt_cookie');
 		
 		if ($this->encryption == TRUE)	
 		{
-			$this->object->load->library('encrypt');
+			$this->CI->load->library('encrypt');
 		}		
 
 		// Are we using a database?
-		if ($this->object->config->item('sess_use_database') === TRUE AND $this->object->config->item('sess_table_name') != '')
+		if ($this->CI->config->item('sess_use_database') === TRUE AND $this->CI->config->item('sess_table_name') != '')
 		{
 			$this->use_database = TRUE;
-			$this->session_table = $this->object->config->item('sess_table_name');
-			$this->object->load->database();
+			$this->session_table = $this->CI->config->item('sess_table_name');
+			$this->CI->load->database();
 		}
 		
 		// Set the cookie name
-		if ($this->object->config->item('sess_cookie_name') != FALSE)
+		if ($this->CI->config->item('sess_cookie_name') != FALSE)
 		{
-			$this->sess_cookie = $this->object->config->item('cookie_prefix').$this->object->config->item('sess_cookie_name');
+			$this->sess_cookie = $this->CI->config->item('cookie_prefix').$this->CI->config->item('sess_cookie_name');
 		}
 	
 		/*
@@ -172,7 +173,7 @@
 	function sess_read()
 	{	
 		// Fetch the cookie
-		$session = $this->object->input->cookie($this->sess_cookie);
+		$session = $this->CI->input->cookie($this->sess_cookie);
 		
 		if ($session === FALSE)
 		{
@@ -183,7 +184,7 @@
 		// Decrypt and unserialize the data
 		if ($this->encryption == TRUE)
 		{
-			$session = $this->object->encrypt->decode($session);
+			$session = $this->CI->encrypt->decode($session);
 		}
 
 		$session = @unserialize($this->strip_slashes($session));
@@ -202,14 +203,14 @@
 		}
 
 		// Does the IP Match?
-		if ($this->object->config->item('sess_match_ip') == TRUE AND $session['ip_address'] != $this->object->input->ip_address())
+		if ($this->CI->config->item('sess_match_ip') == TRUE AND $session['ip_address'] != $this->CI->input->ip_address())
 		{
 			$this->sess_destroy();
 			return FALSE;
 		}
 		
 		// Does the User Agent Match?
-		if ($this->object->config->item('sess_match_useragent') == TRUE AND $session['user_agent'] != substr($this->object->input->user_agent(), 0, 50))
+		if ($this->CI->config->item('sess_match_useragent') == TRUE AND $session['user_agent'] != substr($this->CI->input->user_agent(), 0, 50))
 		{
 			$this->sess_destroy();
 			return FALSE;
@@ -218,19 +219,19 @@
 		// Is there a corresponding session in the DB?
 		if ($this->use_database === TRUE)
 		{
-			$this->object->db->where('session_id', $session['session_id']);
+			$this->CI->db->where('session_id', $session['session_id']);
 					
-			if ($this->object->config->item('sess_match_ip') == TRUE)
+			if ($this->CI->config->item('sess_match_ip') == TRUE)
 			{
-				$this->object->db->where('ip_address', $session['ip_address']);
+				$this->CI->db->where('ip_address', $session['ip_address']);
 			}
 
-			if ($this->object->config->item('sess_match_useragent') == TRUE)
+			if ($this->CI->config->item('sess_match_useragent') == TRUE)
 			{
-				$this->object->db->where('user_agent', $session['user_agent']);
+				$this->CI->db->where('user_agent', $session['user_agent']);
 			}
 			
-			$query = $this->object->db->get($this->session_table);
+			$query = $this->CI->db->get($this->session_table);
 
 			if ($query->num_rows() == 0)
 			{
@@ -242,8 +243,8 @@
 				$row = $query->row();
 				if (($row->last_activity + $this->sess_length) < $this->now) 
 				{
-					$this->object->db->where('session_id', $session['session_id']);
-					$this->object->db->delete($this->session_table);
+					$this->CI->db->where('session_id', $session['session_id']);
+					$this->CI->db->delete($this->session_table);
 					$this->sess_destroy();
 					return FALSE;
 				}
@@ -272,15 +273,15 @@
 		
 		if ($this->encryption == TRUE)
 		{
-			$cookie_data = $this->object->encrypt->encode($cookie_data);
+			$cookie_data = $this->CI->encrypt->encode($cookie_data);
 		}
 
 		setcookie(
 					$this->sess_cookie, 
 					$cookie_data, 
 					$this->sess_length + $this->now, 
-					$this->object->config->item('cookie_path'), 
-					$this->object->config->item('cookie_domain'), 
+					$this->CI->config->item('cookie_path'), 
+					$this->CI->config->item('cookie_domain'), 
 					0
 				);
 	}
@@ -304,8 +305,8 @@
 	
 		$this->userdata = array(
 							'session_id' 	=> md5(uniqid($sessid, TRUE)),
-							'ip_address' 	=> $this->object->input->ip_address(),
-							'user_agent' 	=> substr($this->object->input->user_agent(), 0, 50),
+							'ip_address' 	=> $this->CI->input->ip_address(),
+							'user_agent' 	=> substr($this->CI->input->user_agent(), 0, 50),
 							'last_activity'	=> $this->now
 							);
 		
@@ -313,7 +314,7 @@
 		// Save the session in the DB if needed
 		if ($this->use_database === TRUE)
 		{
-			$this->object->db->query($this->object->db->insert_string($this->session_table, $this->userdata));
+			$this->CI->db->query($this->CI->db->insert_string($this->session_table, $this->userdata));
 		}
 			
 		// Write the cookie
@@ -342,7 +343,7 @@
 		// Update the session in the DB if needed
 		if ($this->use_database === TRUE)
 		{		
-			$this->object->db->query($this->object->db->update_string($this->session_table, array('last_activity' => $this->now), array('session_id' => $this->userdata['session_id'])));
+			$this->CI->db->query($this->CI->db->update_string($this->session_table, array('last_activity' => $this->now), array('session_id' => $this->userdata['session_id'])));
 		}
 		
 		// Write the cookie
@@ -364,8 +365,8 @@
 					$this->sess_cookie, 
 					addslashes(serialize(array())), 
 					($this->now - 31500000), 
-					$this->object->config->item('cookie_path'), 
-					$this->object->config->item('cookie_domain'), 
+					$this->CI->config->item('cookie_path'), 
+					$this->CI->config->item('cookie_domain'), 
 					0
 				);
 	}
@@ -389,8 +390,8 @@
 		{  
 			$expire = $this->now - $this->sess_length;
 			
-			$this->object->db->where("last_activity < {$expire}");
-			$this->object->db->delete($this->session_table);
+			$this->CI->db->where("last_activity < {$expire}");
+			$this->CI->db->delete($this->session_table);
 
 			log_message('debug', 'Session garbage collection performed.');
 		}    
